/*
 * SYSBOARD.H Version 1.01 (C)1995,1996 HUDSON SOFT
 * ボード周辺回路システム関連 Ｃコンパイラ用ヘッダーファイル(SYSBOARD.H)
 */
#ifndef _SYSBOARD_H_
#define _SYSBOARD_H_

/* I/O (IOC) */
#define IO_IO_RESET	0x0700 /* R/W 拡張バスリセットレジスタ
						  (normal 0, 1=reset(level)) */
#define IO_IO_7AR_A	0x0c00 /* R   7up A アドレス保持レジスタ */
#define IO_IO_7AR_B	0x0c40 /* R   7up B アドレス保持レジスタ */
#define IO_IO_VERSION	0x0cc0 /* R   ＧＡバージョン判定レジスタ */
#define IO_IO_REFMASK	0x0d00 /* R/W リフレッシュ・マスクレジスタ */
#define IO_IO_WAIT	0x0d40 /* R/W Ｉ／Ｏウエイト数設定レジスタ */
#define IO_IO_KCS	0x0d80 /* K_port Clock 0:1/128, 1:1/256 */

/* バックアップメモリは PC-FXGA では物理的には実装されていません。PC-FXGA では
 * ソフトウェアで仮想的に実装されています。従って、以下の I/O アドレスを直接に
 * アクセスすると PC-FXGA 上で動作しない事になります。
 * バックアップメモリのアクセスは、必ずバックアップメモリアクセス用ライブラリの
 * filelib.a を使用して下さい。
 */
#define IO_IO_BKUP	0x0c80 /* R/W バックアップメモリアクセス許可レジスタ */
#define BIT_BKUP_BRAM	0x0001 /* IO_IO_BKUP Bit position of BackUpMemory */
#define BIT_BKUP_CARD	0x0002 /* IO_IO_BKUP Bit position of BackUpCARD *

/* K I/O PORT */
#define IO_K0_CR	0x0000	/* W   Keyport0 Contorol */
#define IO_K0_SR	0x0000	/* R	  Status */
#define IO_K0_DATA	0x0040	/* R/W	  Data */
#define IO_K0_DL	0x0040	/* R/W	  Data Low 16bits */
#define IO_K0_DH	0x0042	/* R/W	  Data High 16bits */
#define IO_K1_CR	0x0080	/* W   Keyport1 Contorol */
#define IO_K1_SR	0x0080	/* R	  Status */
#define IO_K1_DATA	0x00c0	/* R/W	  Data */
#define IO_K1_DL	0x00c0	/* R/W	  Data Low 16bits */
#define IO_K1_DH	0x00c2	/* R/W	  Data High 16bits */

#define BIT_K_TRG	1
#define BIT_K_MOD	2
#define BIT_K_IOS	4
#define BIT_K_END	8

#ifndef SIG_MOUSE
#define SIG_MOUSE	0x0d	/* Mouse */
#endif
#define SIG_TAP		0x0e	/* Malti Tap Signature */
#define SIG_PAD		0x0f	/* 6B PAD Signature */

/* timer (TMC) */
#define IO_TIMER_TCR	0x0f00	/* タイマ 制御・状態レジスタ */
#define IO_TIMER_TMR	0x0f80	/* タイマ 初期値レジスタ */
#define IO_TIMER_DWC	0x0fc0	/* タイマ ダウンカウンタ */

/* Interrput (ITC) */
#define IO_ADRERR_CLR	0x0e00	/* W   アドレスエラーレジスタ_クリアレジスタ
								     (SESCC) */
#define IO_IRQ_STAT	0x0e00	/* R   割り込みステータスレジスタ(ISR) */
#define IO_IRQ_MASK	0x0e40	/* R/W 割り込みマスクレジスタ(IMR) */
#define IO_IRQ_LEVELL	0x0e80	/* R/W 割り込みレベル設定レジスタ(ILR0)
							  7A,KING,7B,SIO(73) */
#define IO_IRQ_LEVELH	0x0ec0	/* R/W 割り込みレベル設定レジスタ(ILR1)
								TIMER,EXT,KP */

#define BIT_IRQM_73	0x0001	/* ISR/IMR Bit Position of HuC6273 I/O Int */
#define BIT_IRQM_SIO	0x0001	/* ISR/IMR Bit Position of Serial I/O Int */
#define BIT_IRQM_7B	0x0002	/* ISR/IMR Bit Position of HuC6270 #B Int */
#define BIT_IRQM_KING	0x0004	/* ISR/IMR Bit Position of HuC6272 Int */
#define BIT_IRQM_7A	0x0008	/* ISR/IMR Bit Position of HuC6270 #A Int */
#define BIT_IRQM_KP	0x0010	/* ISR/IMR Bit Position of K I/O Int */
#define BIT_IRQM_EXT	0x0020	/* ISR/IMR Bit Position of EXTERNAL Int */
#define BIT_IRQM_TMI	0x0040	/* ISR/IMR Bit Position of Timer Int */
#define BIT_IRQM_AERR	0x0080	/* ISR/IMR Bit Position of Address Error Int */

/* シリアルコントローラ */
#define IO_SCU_RDR	0x0720	/* 受信データの読みだし */
#define IO_SCU_WDR	0x0720	/* 送信データの書き込み */
#define IO_SCR_SR	0x0722	/* ステータスの読みだし */
#define IO_SCU_CR	0x0722	/* コントロールワードの書き込み */
#define IO_TXRX_IRQ	0x0728	/* SCU TXRDY/RXRDY 割り込みマスク */
#define IO_PTC_CNT0	0x0730	/* カウンタ ＃０ R/W */
#define IO_PTC_CNT1	0x0732	/* カウンタ ＃１ R/W */
#define IO_PTC_CNT2	0x0734	/* カウンタ ＃２ R/W */
#define IO_PTC_CR	0x0736	/* コントロールワード */

/* 割り込みベクタ */
#define IRQVEC_TOP	0x7fc0
#define IRQVEC_73	IRQVEC_TOP + 4*0
#define IRQVEC_EXT	IRQVEC_TOP + 4*0
#define IRQVEC_70B	IRQVEC_TOP + 4*1
#define IRQVEC_KING	IRQVEC_TOP + 4*2
#define IRQVEC_70A	IRQVEC_TOP + 4*3
#define IRQVEC_KP	IRQVEC_TOP + 4*4
#define IRQVEC_TIMER	IRQVEC_TOP + 4*5
#define IRQVEC_6	IRQVEC_TOP + 4*6
#define IRQVEC_7	IRQVEC_TOP + 4*7

#define IRQVEC_TRAP0X	IRQVEC_TOP + 4*8
#define IRQVEC_SFTRST	IRQVEC_TOP + 4*9
#define IRQVEC_10	IRQVEC_TOP + 4*10
#define IRQVEC_11	IRQVEC_TOP + 4*11
#define IRQVEC_MATH	IRQVEC_TOP + 4*12
#define IRQVEC_13	IRQVEC_TOP + 4*13
#define IRQVEC_TRAP1X	IRQVEC_TOP + 4*14
#define IRQVEC_SYSERR	IRQVEC_TOP + 4*15

#endif /* _SYSBOARD_H_ */
